﻿//------------------------------------------------------------------------------------------------------
// The MIT License (MIT) Copyright (c) 2014 Marton Rusko
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 
// associated documentation files (the "Software"), to deal in the Software without restriction, 
// including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial 
// portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//------------------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;

namespace RM.Banking.Common.Interfaces
{
    public interface IBankStatementProcessor
    {
        /// <summary>
        /// Output: Clients 
        /// </summary>
        IEnumerable<BankClient> Clients { get; }

        /// <summary>
        /// Output: Accounts
        /// </summary>
        IEnumerable<BankAccount> Accounts { get; }

        /// <summary>
        /// Output: Statements
        /// </summary>
        IEnumerable<BankStatement> Statements { get; }

        /// <summary>
        /// Output: Transactions
        /// </summary>
        IEnumerable<BankTransaction> Transactions { get; }


        /// <summary>
        /// Process a statement from data
        /// </summary>
        /// <param name="data">Byte data of the statement file</param>
        void Process(byte[] data);

        /// <summary>
        /// Process a statement from multiple data arrays
        /// </summary>
        /// <param name="datas">Byte datas of the statement files</param>
        void Process(IEnumerable<byte[]> datas);

        /// <summary>
        /// Process a statement from a file
        /// </summary>
        /// <param name="filename">Filename of the statement file</param>
        void Process(string filename);

        /// <summary>
        /// Process a statement from multiple files
        /// </summary>
        /// <param name="filenames">Filenames of the statement files</param>
        void Process(IEnumerable<string> filenames);

        /// <summary>
        /// Clear processed data
        /// </summary>
        void Clear();
    }
}
